package fang365

import (
	"github.com/xiaobaiskill/fang/pkg/pool"
	"github.com/xiaobaiskill/fang/pkg/log"
	"strconv"
	"sync"
	"time"
	"fmt"

)

var FangQueue = make(chan []FangInfo, 50)

// 控制中心
type fang365 struct {
	fangs map[string]FangInfo
	sync.Mutex
	fangqueue chan FangInfo
}

// 接手数据   时间对比是否重复  数据库判断的任务
func (f *fang365) init() {
	// 接收获取到的房产数据
	go func() {
		for {
			select {
			case fangs := <-FangQueue:
				f.execute(fangs)
			}
		}
	}()

	// 用于接收 最新发布 且 f.fangs 中没有的数据
	go func() {
		for{
			select {
			case fang := <-f.fangqueue:
				go func(fang FangInfo) {
					fanginfophone := NewfangInfoPhone(fang)
					pool.WorkQueue<-fanginfophone
					b := <-fanginfophone.result
					if !b {
						f.fangqueue <- fang
					}
				}(fang)
			}
		}
	}()

	// 超时时间检测
	go func() {
		tc := time.NewTicker(time.Minute) // 一分钟 检测一次
		for {
			select {
			case <-tc.C:
				f.checktime()
			}
		}
	}()
}

func (f *fang365) checktime() {
	f.Lock()
	defer f.Unlock()
	new_time := time.Now().Unix()
	for k, v := range f.fangs {
		l_time, _ := strconv.Atoi(v.Lucupdatetime)
		l_int := int64(l_time)
		if new_time-l_int > 15*60 { // 超过10分针就剔除这个数据
			delete(f.fangs, k)
		}
	}
}

func (f *fang365) execute(fangs []FangInfo) {
	f.Lock()
	defer f.Unlock()
	datetime := time.Now().Unix()
	for _, v := range fangs {
		l_time, _ := strconv.Atoi(v.Lucupdatetime)
		l_int := int64(l_time)
		//fmt.Println(datetime)
		//fmt.Println(time.Unix(l_int, 0).Format("2006-01-02 15:04:05"))
		//fmt.Println(datetime-l_int)
		// 发布和页面搜索到的时间有一定时间差
		// 当前时间-发布时间 <= 3 * 60
		if datetime - l_int <= 2 * 60 {
			if _,ok := f.fangs[v.Id];!ok{
				f.fangs[v.Id] = v
				f.fangqueue <- v
				log.Logger.Info(fmt.Sprintf("有新的房产信息哦: %v",v))
			}
		}
	}
}

func Newfang365()*fang365{
	f := fang365{}
	f.fangs = make(map[string]FangInfo)
	f.fangqueue = make(chan FangInfo, 100)
	f.init()
	return &f
}
